package dj.service;

import java.lang.reflect.InvocationTargetException;
import java.util.List;

import dj.model.Friend;
import dj.model.FriendGroup;
import dj.pageModel.Puser;
import dj.pageModel.TreeNode;

public interface FriendService {

	/**
	 * 添加好友
	 * 
	 * @param friend
	 */
	public void saveFriend(Friend friend);

	/**
	 * 修改好友信息
	 * 
	 * @param friend
	 */
	public void updateFriend(Friend friend);
	
	/**
	 * 删除好友
	 * @param friend
	 */
	public void deleteFriend(Friend friend);

	/**
	 * 保存用户好友组
	 * 
	 * @param friendGroup
	 */
	public void saveFriendGroup(FriendGroup friendGroup);

	/**
	 * 更新好友组
	 * 
	 * @param friendGroup
	 */
	public void updateFriendGroup(FriendGroup friendGroup);

	/**
	 * 初始化好友
	 */
	public void initFriendMap();

	/**
	 * 根据当前用户和好友id获取好友信息
	 * 
	 * @param userid
	 * @param friendid
	 * @return
	 */
	public Friend getFriend(String userid, String friendid);

	/**
	 * 根据用户获取其好友
	 * 
	 * @param user
	 * @return
	 */
	public List<Friend> getFriendList(Puser user);

	/**
	 * 根据用户获取都那些用户有其好友
	 * 
	 * @param user
	 * @return
	 */
	public List<Friend> getHasFriendList(Puser user);

	/**
	 * 根据用户和组id获取该组下所有用户
	 * 
	 * @param user
	 * @param groupid
	 * @return
	 */
	public List<Friend> getFriendListByGroupid(Puser user, String groupid);

	/**
	 * 初始化好友组
	 */
	public void initFriendGroupMap();

	/**
	 * 初始化公共好友组，从数据库加载时调用该方法初始化，否则initFriendGroupMap方法中已经写入
	 */
	public void initCommonFriendGroup();

	/**
	 * 根据用户id获取好友组
	 * 
	 * @param userid
	 * @return
	 */
	public List<FriendGroup> getFriendGroup(String userid);

	/**
	 * 把好友拼成一个树
	 * 
	 * @param ls
	 * @return
	 * @throws IllegalAccessException
	 * @throws InvocationTargetException
	 */
	public List<TreeNode> getFriendTree(List<Friend> ls) throws IllegalAccessException, InvocationTargetException;

	/**
	 * 把好友拼成树节点
	 * 
	 * @param f
	 * @return
	 */
	public TreeNode getFriendNode(Friend f);

}
